package com.stylefeng.guns.modular.system.controller;

import com.alipay.api.AlipayApiException;
import com.stylefeng.guns.core.base.controller.BaseController;
import com.stylefeng.guns.core.util.AliTool;
import com.stylefeng.guns.core.util.AlipayConfig;
import com.stylefeng.guns.modular.system.model.Setup;
import com.stylefeng.guns.modular.system.service.ISetupService;
import org.beetl.ext.fn.Print;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

@Controller
@RequestMapping("/api/alipayResult")
public class AlipayResultController extends BaseController {

    @Autowired
    private ISetupService iSetupService;

    @RequestMapping("")
    public void alipayResult(HttpServletRequest request, HttpServletResponse response) {
        String seller_email = null;
        // 获取支付宝GET过来反馈信息
        Map<String, String> params = new HashMap<String, String>();
        Map requestParams = request.getParameterMap();
        for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
            String name = (String) iter.next();
            String[] values = (String[]) requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i]
                        : valueStr + values[i] + ",";
            }
            // 乱码解决，这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
            // valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
            params.put(name, valueStr);
            if (name == null) {
                continue;
            } else if (name.equals("app_id")) {
                seller_email = valueStr;
            }
        }

        // 获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//
        // 商户订单号
        Setup setUp = iSetupService.selectByAppid(seller_email);
        try {
            PrintWriter out = response.getWriter();
            String out_trade_no = new String(request.getParameter("out_trade_no")
                    .getBytes("ISO-8859-1"), "UTF-8");
            System.out.println(out_trade_no + ":out_trade_no");
            // alipayResult.setOutTradeNo(out_trade_no);
            // 支付宝交易号

            String trade_no = new String(request.getParameter("trade_no").getBytes(
                    "ISO-8859-1"), "UTF-8");
            // alipayResult.setTradeNo(trade_no);
            System.out.println(trade_no + ":trade_no");
            // 获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//
            // 计算得出通知验证结果

            boolean verify_result = false;
            try {
                verify_result = AliTool.rsaCheckV1(params,
                        setUp.getAliPublicKey(), AlipayConfig.CHARSET, "RSA2");
            } catch (AlipayApiException e) {
                e.printStackTrace();
            }

            if (verify_result) {// 验证成功
                // ////////////////////////////////////////////////////////////////////////////////////////
                // 请在这里加上商户的业务逻辑程序代码
                // 该页面可做页面美工编辑
                //writer.write("验证成功<br />");
                out.print("验证成功<br />");
                // ——请根据您的业务逻辑来编写程序（以上代码仅作参考）——

                // ////////////////////////////////////////////////////////////////////////////////////////
            } else {
                // 该页面可做页面美工编辑
                //writer.write("验证失败");
                out.print("验证失败");
            }
        }catch (IOException io){
            io.printStackTrace();
        }
    }

}
